package com.springboot.util.download;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.regex.Pattern;

/**
 * 下载
 *
 * @author zyj
 * @date 2020/9/6
 */
public class DownloadUtil {



    /**
     * 处理文件名后放入文件列表
     *
     * @param fileNameSet  用于判断文件是否有重复
     * @param fileNameList 用于存放文件名
     * @param fileName     期望放入的文件名
     * @author zyj
     * @date 2020/9/4
     */
    public static void putFileName(HashSet<String> fileNameSet, ArrayList<String> fileNameList, String fileName) {
        int beforeSize = fileNameSet.size();
        fileNameSet.add(fileName);
        int afterSize = fileNameSet.size();
        if (afterSize > beforeSize) {
            // 文件名不存在
            fileNameList.add(fileName);
        } else if (afterSize == beforeSize) {
            // 文件名已经存在
            String handledFinalName = getFinalName(fileName);
            putFileName(fileNameSet, fileNameList, handledFinalName);
        }
    }

    /**
     * 文件名序号加1
     *
     * @param fileName 文件名
     * @return 返回序号加1后的文件名
     * @author zyj
     * @date 2020/9/4
     */
    public static String getFinalName(String fileName) {
        int indexOfDot = fileName.indexOf(".");
        String substring = fileName.substring(indexOfDot - 1, indexOfDot);
        // 左小括号的index
        int indexOfOpenParenthese = fileName.lastIndexOf("(");
        // 右小括号的index
        int indexOfCloseParenthese = fileName.lastIndexOf(")");
        if (indexOfOpenParenthese == -1 || indexOfCloseParenthese == -1) {
            // 文件名不是 "合同模板(1).doc" 的形式
            return getFileNameOne(fileName);
        }
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
//        Integer num = Integer.valueOf(fileName.substring(fileName.lastIndexOf("(") + 1, fileName.lastIndexOf(")")));
        String numStr = fileName.substring(indexOfOpenParenthese + 1, indexOfCloseParenthese);
        Boolean bool = pattern.matcher(numStr).matches();
        if (substring != null && substring.equals(")") && indexOfOpenParenthese < indexOfCloseParenthese && bool) {
            // 文件名是 "合同模板(1).doc" 的形式
            return new StringBuilder()
                    .append(fileName.substring(0, fileName.lastIndexOf("(") + 1))
                    .append(Integer.valueOf(numStr) + 1)
                    .append(fileName.substring(fileName.lastIndexOf(")"))).toString();
        } else {
            // 文件名不是 "合同模板(1).doc" 的形式
            return getFileNameOne(fileName);
        }
    }

    /**
     * 文件名 -> 文件名(1)
     *
     * @param fileName 文件名
     * @return 文件名(1)
     * @author zyj
     * @date 2020/9/4
     */
    public static String getFileNameOne(String fileName) {
        int indexOfDot = fileName.lastIndexOf(".");
        return new StringBuilder()
                .append(fileName.substring(0, indexOfDot))
                .append("(1)")
                .append(fileName.substring(indexOfDot)).toString();
    }

    /**
     * 获取去掉后缀的文件名
     *
     * @param fileName 文件名称
     * @return java.lang.String 去掉后缀的文件名
     * @author zyj
     * @date 2020/8/26 11:47
     */
    public static String getFileName(String fileName) {
        int index = fileName.indexOf(".");
        return fileName.substring(0, index);
    }

    /**
     * 根据文件路径获取文件后缀
     *
     * @param filePath 文件路径
     * @return java.lang.String 文件后缀名
     * @author zyj
     * @date 2020/8/26 11:47
     */
    public static String getFileSuffix(String filePath) {
        String[] split = filePath.split("\\.");
        String suffix = split[split.length - 1];
        return suffix;
    }

}
